package com.xreal.common.utils;

import org.apache.commons.lang3.StringUtils;

/**
 * @author yangzhongming
 * @desc 证件号 脱敏处理
 * @date 2022/4/26
 */
@SuppressWarnings("unused")
public class CertUtils {

    private CertUtils() {
    }


    /**
     * 证件号（身份证号） 格式校验正则
     */
    public static final String ID_CARD_REGEX = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)";

    /**
     * 证件号（护照号） 格式校验正则
     */
    public static final String PASSPORT_REGEX = "(^\\d{8}$)|(^\\d{9}$)";

    /**
     * 证件号（身份证号）脱敏筛选正则
     */
    public static final String ID_CARD_BLUR_REGEX = "(?<=\\w{3})\\w(?=\\w{4})";

    /**
     * 证件号（身份证号）格式校验
     *
     * @param idCard 证件号（身份证号）
     * @return 是否符合条件
     */
    public static boolean checkIdCard(String idCard) {
        if (StringUtils.isEmpty(idCard)) {
            return false;
        }
        return idCard.matches(ID_CARD_REGEX);
    }

    /**
     * 证件号（身份证号）格式校验
     *
     * @param passport 证件号（护照号）
     * @return 是否符合条件
     */
    public static boolean checkPassport(String passport) {
        if (StringUtils.isEmpty(passport)) {
            return false;
        }
        return passport.matches(PASSPORT_REGEX);
    }

    /**
     * 证件号脱敏处理
     *
     * @param cert 证件号
     * @return 证件号 脱敏处理
     */
    public static String blurCert(String cert) {
        if (checkIdCard(cert)) {
            return cert.replaceAll(ID_CARD_BLUR_REGEX, "*");
        }
        if (checkPassport(cert)) {
            return cert.substring(0, 2) + new String(new char[cert.length() - 5]).replace("\0", "*") + cert.substring(cert.length() - 3);
        }
        return cert;
    }
}
